\documentclass[10pt]{article}

\title{75.10 - Simulador de Carreras}
\author{Grupo Número 6}

% Definición del tamaño de página y los márgenes:
\usepackage[a4paper,hoffset=0.5cm,left=2cm]{geometry}
%\usepackage[latin1]{inputenc}
\usepackage[utf8]{inputenc}
% Vamos a escribir en castellano:
\usepackage[spanish]{babel}
\usepackage{courier}
% Para multicolumnas faciles, ver la caratula.
\usepackage{multicol}
% Para rotar paginas
\usepackage{lscape}
% Para caracteres en los enumerados.
\usepackage{enumerate}

% Para tener cabecera y pie de página con un estilo personalizado:
\usepackage{fancyhdr}

%\usepackage{pdfpages}

\usepackage{amsfonts}
\usepackage{float}
% Para poner el texto "Figura X" en negrita
\usepackage[hang,bf]{caption}

%
% Para incluir imágenes, el siguiente código carga el paquete graphicx 
% según se está generando un archivo dvi o un pdf (con pdflatex). 
%
\newif\ifpdf
\ifx\pdfoutput\undefined
	\pdffalse
\else
	\pdfoutput=1
	\pdftrue
\fi

\ifpdf
	\usepackage[pdftex]{graphicx}
	\pdfcompresslevel=9
\else
	\usepackage[dvips]{graphicx}
\usepackage{multicol}
\fi

% Todas las imágenes están en el directorio img:
%
%\newcommand{\imgdir}{img}
%\graphicspath{{\imgdir/}}
%------------------------- Inicio del documento ---------------------------

\begin{document}


%
% Hago que en la cabecera de página se muestre a la derecha la sección,
% y en el pie, en número de página a la derecha:
%
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{}{\thesection\ \ #1}}
\lhead{}
\chead{}
\rhead{\rightmark}
\lfoot{}
\cfoot{}
\rfoot{\thepage}

%
% Carátula:
%
\begin{titlepage}
%
% Sin cabecera ni pie de página:
%
	\thispagestyle{empty}
%
% Título:
%
	\hspace{40cm}
	\begin{center}
		\Huge{75:10 Técnicas de Diseño}\\
		\vspace{1cm}
		\large{Trabajo práctico}\\
		\Large{Documento de Arquitectura}\\
		\Huge{Simulador de Carreras}\\
		\vspace{1cm}
	\end{center}
	\hspace{20cm}
%	\vspace{1cm}

%	
% Integrantes:
%
	\vfill
	\hspace{20cm}
	\begin{center}
%	\begin{multicols}{2}
	\begin{flushleft}
		\begin{tabular}{llll}
			\multicolumn{4}{l}{\bf Grupo 6:} \\
			\multicolumn{2}{l}{\it Integrantes:} \\
			& Anaya, Roxana Maribel & 82875 & maribel.anaya@gmail.com \\
			& Esteban Alejandro Czelada & 79992 & gauchomouse@gmail.com \\
			& Gorgazzi, Martín Osvaldo & 80843 & martin.gorgazzi@gmail.com\\
			& Ledo, María Soledad & 82402 & msledo@gmail.com \\
			& Saldaño, María Alejandra & 85019 & alejandrasaldanio@yahoo.com.ar \\
			& Tripodi, Eduardo Martín & 80236 & tripo03@gmail.com \\
		\end{tabular}
	\end{flushleft}

	\begin{flushleft}
		\begin{tabular}{lll}
			\multicolumn{3}{l}{\bf Cátedra:} \\
			\multicolumn{2}{l}{\it Titular:} \\
			& Ing. Guillermo G. Pantaleo \\
%			\multicolumn{2}{l}{\it JTP:} \\
%			& Ing Diego Montaldo \\
			\multicolumn{2}{l}{\it Ayudante:} \\
			& Florencia Diaz \\
		\end{tabular}
	\end{flushleft}

%	\end{multicols}
	\end{center}
	\vfill
%
% Fecha o cuatrimestre:
%
\flushright{2\sptext{do} cuatrimestre 2009}
\end{titlepage}

%l
% Hago que las páginas se comiencen a contar a partir de aquí:
%
\setcounter{page}{1}
\tableofcontents
%\newpage
%\listoffigures
%\listoftables
\newpage

%\section{Enunciado}
%\input{fuentes/enunciado}
%\newpage

\section{Organización del trabajo}
\subsection{Hipótesis}
\begin{enumerate}[\indent a. ]
	\item Cada cuadra tiene un solo sentido, son solo de asfalto y tiene una única velocidad máxima.
	\item Los vehículos van a tener 3 posiciones solamente: vertical, horizontal y diagonal.
	\item Cuando los autos chocan automáticamente pierden y después de 50 tick desaparecen de la competencia.
	\item La cantidad de puntos que se decrementan al carnet del conductor es de 1 punto por cada infracción.	
	\item Cada jugador solo puede elegir un solo auto para competir en una carrera.	
	\item Si un auto esta circulado a una velocidad máxima en cada tick se va a mover una posición de la grilla.En cambio si circula en un velocidad media después de 2 tick se va a mover a la siguiente posición de la grilla y así sucesivamente para las distintas velocidades.	
	\item En la creación de una carrera se debe establecer el horario de largada.	
	\item Al iniciar la Carrera, todos los vehículos que compiten se encuentran en el punto de largada. 
\end{enumerate}

%--------------
\subsection{Lista de tareas}
\begin{enumerate}
	\item Casos de Uso.
	\item Diseño del modelo.
	Diseño del modelo completo de una carrera, con vehículos, conductores, multas, puntuaciones, conductores, etc.

	\item Mensajería y comunicación con los clientes.
	
	Manera de proveer a los clientes (jugadores) la información de cada carrera. Así como también los medios para inscribirse en las que aun no han sido cerradas. Formato de mensajes.

	\item Control de la ejecución de la simulación.
		Definir:
		\begin{itemize}
			\item La forma en que se define quien y como actúa en cada instante.
			\item Las clases necesarias para el control de la simulación como un todo.
		\end{itemize}
		Proveer una manera de secuenciar tareas transparente al modelo.

	\item Arquitectura. 
		Estructura general de todo el sistema, con las interfaces necesarias para separar las capas.		

	\item Resolución de las decisiones de conductores.
		Definir:
		\begin{itemize}
			\item La manera en que un conductor comprende la situaciones de su ambiente.
			\item La forma en que pondera las situaciones que considera importantes.
			\item El mecanismo de selección de las acciones a tomar.
			\item Manejo de decisiones pasadas y futuras, plan de acción.
			\item Tener en cuenta el recorrido en la lógica del conductor.
		\end{itemize}


	\item Carrera.

		Definir:
		\begin{itemize}
			\item Clases que representan el escenario.
			\item Elementos estáticos del escenario.
			\item Cuadras, Calles, Sentidos.
			\item Clases que representen regiones del escenario (para los rangos de visión de los conductores, cámaras y policías).
		\end{itemize}			

	\item Persistencia.

		Definir:
		\begin{itemize}
			\item Que clases requieren poder ser guardadas.
			\item Sobre que se almacenan los datos
				\begin{itemize}
					\item Compresión de archivos de texto.
					\item Base de datos vs. archivos planos XML.
				\end{itemize}
			\item Definir interfaz de interacción.
		\end{itemize}
		Candidatos a tener persistencia: 
		\begin{itemize}
			\item Configuraciones varias.
			\item Plantillas de carreras (configuración general sin tener en cuenta jugadores).
			\item Inscripciones a las distintas carreras.
			\item Carrera siendo simulada o ya terminada, más los cuadros simulados.
			\item Vehículos disponibles.
			\item Conductores disponibles.
			\item Registros de ejecución.
		\end{itemize}

	\item Capa lógica de persistencia (persistencia lógica).

		Fachada para la interacción con la persistencia física.
	
		Debe encapsular la implementación del almacenamiento de datos.

		Obtener una forma uniforme de almacenar datos del modelo.

		\emph{Idea:} aplicar AbstractFactory de persistencia lógica, que sea capaz de comprender un ``string de conexión'' para la decisión de que AbstractFactory de persistencia física utilizar.

		Definir el comportamiento de:
		\begin{itemize}
			\item Clase Entidad.
			\item Clase Ensamblador.
			\item Excepción de Entidad incompatible (el Objeto no es compatible con el ensamblador suministrado).
			\item Excepción de Entidad no identificable (al obtener una entidad no se dan los datos necesarios para identificarla).
			\item Clase Registro de ensambladores (posible Singleton).
		\end{itemize}

	\item Capa de servicios de aplicación.
		Definir la interacción con los diferentes clientes.

	\item Objetos que ocupan un lugar del escenario.
	
		Definir el comportamiento de:
		\begin{itemize}
			\item Clase Elemento.
			\item Clase Posición.
			\item Clase Grilla.
			\item Clase Autoparte.
			\item Clase Aretriaparte.
		\end{itemize}

	\item Encontrar recorrido.
		Definir el comportamiento de:
		\begin{itemize}
			\item Clase GuiaT.
			\item Clase Cruce.
			\item Clase Cuadra.
			\item Clase Recorrido.
			\item Clase Arteria.
		\end{itemize}

		Definir la manera de construir un recorrido.
		
		Se representa la ciudad mediante un grafo, y se utilizara una libreria de grafos para la obtención de un camino mínimo.

	\item Vehículo.
		Definir las responsabilidades de un vehículo.
		
		Diagramas de secuencia de como resuelve el momento en que le toca mover (sin especificar la obtención de una acción a partir de acciones recomendadas).

	\item Infracciones y Control.
	
		Definir la clase Infracción así como también la administración de las infracciones que se le aplican a cada conductor. Sus puntajes y consecuencias.

	\item Toma de decisiones.
		
		Definir el comportamiento de:
		\begin{itemize}
			\item Clase Conductor.
			\item Clase Comportamiento.
			\item Clase Situación.
			\item Clase Acción.
			\item Clase Comportamiento.
		\end{itemize}

		Se debe tener en cuenta las interacciones con Obstáculo.
\end{enumerate}

%\newpage
%\subsection*{Tareas realizadas hasta el momento por cada integrante del grupo:}

\newpage
\section{Casos de uso}
\begin{center}
%	\addcontentsline{toc}{subsection}{Diagrama de casos de uso}
	\includegraphics[scale=0.50]{img/CasosDeUso.png}
	\captionof{figure}{Diagrama de casos de uso}
	\label{fig:CasosDeUso}
\end{center}

\subsection{Descripción de casos de uso}
\subsection{Ejecutar Simulación}
En la hora de inicio de la carrera, un Simulador ejecuta la carrera con los autos predefinidos más los agregados por los participantes y almacena los resultados de la misma.

De esto se desprende hacer:
\begin{itemize}
	\item Cargar la ciudad y participantes.
	\item Las decisiones que debe tomar cada uno de los conductores ante una determinada acción.
	\item Controlar las infracciones
	\item Almacenar los resultados (de carreras parciales y completadas).
\end{itemize}

\subsection{Inscribirse en Carrera}
Este caso de uso permite a los jugadores inscribirse para poder participar de una carrera en el horario predefinido.

De esto desprende hacer:
\begin{itemize}
	\item Seleccionar un vehiculo y sus caracteristicas.
	\item Definir los comportamientos ante los posibles eventos.
	\item Seleccionar una carrera de todas las que creo el administrador. 
\end{itemize}

\subsection{Mirar Carrera}
Este caso de uso se encarga de mostrar una carrera que ya finalizo. También te permite visualizar el resultado de la misma.

\subsection{Mantener Carrera}
Permite a un Administrador hacer altas, bajas, modificaciones y listados de Carreras. Una carrea esta compuesta por un Escenario, un conjunto de vehiculos no participantes y un conjunto de competidores (que tienen asignado un Vehículo).

De esto se desprende hacer:
\begin{itemize}
	\item Fijar una fecha y hora de inicio.
	\item Un punto de inicio y fin.
	\item Seleccionar un escenario.
	\item Seleccionar los vehiculos que no participan pero forman parte de la ciudad. 
\end{itemize}

\subsection{Mantener Vehículo}
En este caso de uso el administrador puede hacer altas, bajas, modificaciones y listados de los Vehículos. Un vehiculo son los principales componentes de una carrera. 

\subsection{Mantener Conductor}
Este caso de uso permite a un Administrador realizar las altas, bajas, modificaciones y listados de Conductores. Un conductor es la forma de comportarse de cada vehiculo antes los distintos eventos de la simulación.

\subsection{Mantener Escenario}
En este caso de uso un Administrador puede hacer altas, bajas, modificaciones y listado de Escenarios. Un escenario esta definido por las cuadras disponibles para correr y obstaculos.

\newpage
\section{Diagramas de Arquitectura}
%\subsection{Vista Lógica}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista lógica}
	\includegraphics[scale=0.55]{img/vLogica.png}
	\captionof{figure}{Vista lógica}
	\label{fig:vLogica}
\end{center}
\subsection{Vista lógica}

%\subsection{Vista de Componentes}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de componentes}
	\rotatebox{90}{ \includegraphics[scale=0.55]{img/vComponentes.png} }
	\captionof{figure}{Vista de componentes}
	\label{fig:vComponentes}
\end{center}

\newpage
%\subsection{Vista de Procesos}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de procesos}
	\includegraphics[scale=0.5]{img/vProcesos.png}
	\captionof{figure}{Vista de procesos}
	\label{fig:vProcesos}
\end{center}

%\subsection{Vista de Despliegue}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de despliegue}
	\includegraphics[scale=0.5]{img/vDespliegue.png}
	\captionof{figure}{Vista de despliegue}
	\label{fig:vDespliegue}
\end{center}

\newpage
\section{Diagramas del paquete Simulación}

Es responsabilidad del paquete Simulación la planificación y ejecución de tareas (representadas mediante Compartido.ITransaccion).

Para tal fin se provee de la clase IPlanificador que es capaz de realizar tareas basicas de administración de tareas. Permite además proveer de un comparador de ITransaccion con el fin de determinar prioridades de ejecución. Un IPlanificador está pensando principalmente como una colección de ITransacciones a las que se deben activar en determinado instante, no tiene consideraciones sobre que tareas realiza cada una.

Se presenta una implementación basica de un comparador (PrimerRegistradoMayorPrioridad), que permite agregar una ITransaccion y definir una secuencia de prioridad basandose en la clase de la instancia provista.

Además se muestra ActivarTodos, cuya unica responsabilidad es llamar al método activar de cada una de las transacciones registradas en cada instante. Esta implementación de IPlanificador no controla tiempo alguno de ejecución entre instantes.

La interfaz IPlanificador permite la construcción de formas más eficientes de activación, como por ejemplo un planificador que solo active las transacciones que deben realizar alguna tarea en el instante actual.

\begin{center}
	\addcontentsline{toc}{subsection}{Modelo de control de simulación}
	\includegraphics[scale=0.55]{img/ControlModelo.png}
	\captionof{figure}{Modelo de simulación.control}
	\label{fig:ControlModelo}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Secuencia tentativa de control de simulación}
	\includegraphics[scale=0.55]{img/ControlSiguienteInstante.png}
	\captionof{figure}{Secuencia tentativa de control de simulación. Escenario: Activar todo en cada instante.}
	\label{fig:ControlSiguienteInstante}
\end{center}

\section{Diagramas del paquete Persistencia (persistencia lógica)}

La capa de persistencia lógica abstrae al modelo de la forma en que se almacenan las entidades del mismo.

Se pueden plantear las siguiente equivalencias entre las interfaces del paquete y su correspondiente representación en un soporte rigido:
\begin{itemize}
	\item IProducto: Es la representación de una entidad del modelo en disco.
	\item IIngrediente: Un atributo de una entidad del modelo.
	\item IGondola: Un conjunto de entidades del modelo que pertenecen a un mismo tipo. Permite obtener una entidad de un conjunto mediante un identificador.
	\item IAlmacen: Un conjunto de gondolas agrupadas, accesibles a travez de un "string de conexión". Su tarea es la obtención de un conjunto de entidades (una instancia de IGondola) mediante un identificador.
	\item ILector: Provee la manera de convertir un producto determinado en una entidad del modelo.
	\item IEscritor: Encapsula la forma en que se transforma una entidad del modelo en una representación física del mismo.
\end{itemize}

Se provee un conjunto de excepciones para evidenciar casos de utilización incorrecta de la capa de persistencia.

\begin{center}
	\addcontentsline{toc}{subsection}{Interfaz entre la capa de persistencia y la física}
	\includegraphics[scale=0.55]{img/PersistenciaModelo.png}
	\captionof{figure}{Interfaces provistas para encapsular la persistencia.}
	\label{fig:PersistenciaModelo}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Secuencia de utilización de la capa de persistencia}
	\includegraphics[scale=0.55]{img/PersistenciaSecuencia1.png}
	\captionof{figure}{Un código cliente utiliza un almacen creado previamente para guardar sus entidades.}
	\label{fig:PersistenciaSecuencia1}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Excepciones}
	\includegraphics[scale=0.55]{img/PersistenciaExcepciones.png}
	\captionof{figure}{Excepciones de la capa de persistencia.}
	\label{fig:PersistenciaExcepciones}
\end{center}

\newpage
\section{Diagramas del paquete Modelo}

\end{document}

El paquete Modelo presenta las clases necesarias para representar una carrera, simularla y obtener sus resultados.

\begin{center}
	\addcontentsline{toc}{subsection}{Elementos}
	\includegraphics[scale=0.55]{img/GeneralElementos.png}
	\captionof{figure}{Clases que ocupan un lugar físico del escenario.}
	\label{fig:GeneralElementos}
\end{center}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Secuenica de una carrera}
	\includegraphics[scale=0.40]{img/GeneralSecuenciaCarrera.png}
	\captionof{figure}{Diagrama de secuencia de una carrera.}
	\label{fig:GeneralSecuenciaCarrera}
\end{center}
\end{landscape}


\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de Carrera}
	\includegraphics[scale=0.55]{img/GeneralCarrera.png}
	\captionof{figure}{Clase Carrera. Representación de una carrera (programada, en ejecución o terminada)}
	\label{fig:GeneralCarrera}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de Vehículo}
	\includegraphics[scale=0.55]{img/GeneralVehiculo.png}
	\captionof{figure}{Relaciones directas de la clase Vehículo.}
	\label{fig:GeneralVehiculo}
\end{center}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama global del paquete Modelo}
	\includegraphics[scale=0.30]{img/GeneralModelo.png}
	\captionof{figure}{Diagrama global del paquete Modelo.}
	\label{fig:GeneralModelo}
\end{center}
\end{landscape}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de clases del paquete Modelo.seniales}
	\includegraphics[width=1.0\textheight]{img/DiagramaClasesPkgSeniales.png}
	\captionof{figure}{Clases del paquete Modelo.seniales.}
	\label{fig:ModeloSeniales}
\end{center}
\end{landscape}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de clases del paquete Modelo.controles}
	\includegraphics[scale=0.4]{img/DiagramaClasesPkgControles.png}
	\captionof{figure}{Clases del paquete Modelo.controles.}
	\label{fig:ModeloControles}
\end{center}
\end{landscape}

\end{document}
